// Vue1.x 中响应式数据对象的所有属性（key）和 dep 是一一对应对应关系
// ，一个 key 对应一个 dep；响应式数据在页面中每引用一次就会产生一个 watcher
// ，所以在 Vue1.0 中 dep 和 watcher 是一对多的关系。
export default function Dep(){
    // 存储dep收集的所有watcher
    this.watchers = []
}
// Dep。target是一个静态属性，值为null或者wacher的实例
// 在编译阶段，实例化watcher，将Dep.target = this  然后重新设为null
Dep.target = null


// 收集watcher  
// 在发生读取操作，并且Dep。target不为null时进行收集
// 也就是watcher没有被实例化，这时间Dep。target = null
Dep.prototype.depend = function(){
    if(this.watchers.includes(Dep.target)) return
    // 收集watcher
    this.watchers.push(Dep.target)
}

// 通知自己收集的watcher 执行更新函数
Dep.prototype.notify = function(){
    for(let watcher of this.watchers){
        watcher.update()
    }
}